package cn.webwheel.tutorials.filter;

import cn.webwheel.Filter;
import cn.webwheel.FilterChain;

/**
 * 点击数统计过滤器，实现cn.webwheel.Filter接口
 * 概念与api都类似与servlet filter，并且可以做到更加灵活，通过代码配置指定其起作用的动作类
 */
public class CountFilter implements Filter {

    private int count;

    // 初始化操作，当Main.init方法调用之后执行
    public void init() {
        System.out.println("CountFilter启动");
    }

    public boolean process(FilterChain chain) throws Exception {
        // 检查动作类是否为Support实例
        if (Support.class.isAssignableFrom(chain.getActionClass())) {
            //传入点击次数
            ((Support)chain.getAction()).setCount(++count);
        }
        // 继续执行
        return chain.go();
    }

    // 过滤器销毁操作，在Main.destroy方法调用之前调用
    public void destroy() {
        System.out.println("CountFilter停止");
    }

    public static interface Support {
        void setCount(int count);
    }
}
